home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / PIL / FliImagePlugin.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  4KB  |  106 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __version__ = '0.2'
  5. import Image
  6. import ImageFile
  7. import ImagePalette
  8. import string
  9.  
  10. def i16(c):
  11.     return ord(c[0]) + (ord(c[1]) << 8)
  12.  
  13.  
  14. def i32(c):
  15.     return ord(c[0]) + (ord(c[1]) << 8) + (ord(c[2]) << 16) + (ord(c[3]) << 24)
  16.  
  17.  
  18. def _accept(prefix):
  19.     return i16(prefix[4:6]) in (44817, 44818)
  20.  
  21.  
  22. class FliImageFile(ImageFile.ImageFile):
  23.     format = 'FLI'
  24.     format_description = 'Autodesk FLI/FLC Animation'
  25.     
  26.     def _open(self):
  27.         s = self.fp.read(128)
  28.         magic = i16(s[4:6])
  29.         if magic not in (44817, 44818):
  30.             raise SyntaxError, 'not an FLI/FLC file'
  31.         
  32.         self.mode = 'P'
  33.         self.size = (i16(s[8:10]), i16(s[10:12]))
  34.         duration = i32(s[16:20])
  35.         if magic == 44817:
  36.             duration = duration * 1000 / 70
  37.         
  38.         self.info['duration'] = duration
  39.         palette = map((lambda a: (a, a, a)), range(256))
  40.         s = self.fp.read(16)
  41.         self._FliImageFile__offset = 128
  42.         if i16(s[4:6]) == 61696:
  43.             self._FliImageFile__offset = self._FliImageFile__offset + i32(s)
  44.             s = self.fp.read(16)
  45.         
  46.         if i16(s[4:6]) == 61946:
  47.             s = self.fp.read(6)
  48.             if i16(s[4:6]) == 11:
  49.                 self._palette(palette, 2)
  50.             elif i16(s[4:6]) == 4:
  51.                 self._palette(palette, 0)
  52.             
  53.         
  54.         palette = map((lambda .0: (r, g, b) = .0chr(r) + chr(g) + chr(b)), palette)
  55.         self.palette = ImagePalette.raw('RGB', string.join(palette, ''))
  56.         self.frame = -1
  57.         self._FliImageFile__fp = self.fp
  58.         self.seek(0)
  59.  
  60.     
  61.     def _palette(self, palette, shift):
  62.         i = 0
  63.         for e in range(i16(self.fp.read(2))):
  64.             s = self.fp.read(2)
  65.             i = i + ord(s[0])
  66.             n = ord(s[1])
  67.             if n == 0:
  68.                 n = 256
  69.             
  70.             s = self.fp.read(n * 3)
  71.             for n in range(0, len(s), 3):
  72.                 r = ord(s[n]) << shift
  73.                 g = ord(s[n + 1]) << shift
  74.                 b = ord(s[n + 2]) << shift
  75.                 palette[i] = (r, g, b)
  76.                 i = i + 1
  77.             
  78.         
  79.  
  80.     
  81.     def seek(self, frame):
  82.         if frame != self.frame + 1:
  83.             raise ValueError, 'cannot seek to frame %d' % frame
  84.         
  85.         self.frame = frame
  86.         self.fp = self._FliImageFile__fp
  87.         self.fp.seek(self._FliImageFile__offset)
  88.         s = self.fp.read(4)
  89.         if not s:
  90.             raise EOFError
  91.         
  92.         framesize = i32(s)
  93.         self.decodermaxblock = framesize
  94.         self.tile = [
  95.             ('fli', (0, 0) + self.size, self._FliImageFile__offset, None)]
  96.         self._FliImageFile__offset = self._FliImageFile__offset + framesize
  97.  
  98.     
  99.     def tell(self):
  100.         return self.frame
  101.  
  102.  
  103. Image.register_open('FLI', FliImageFile, _accept)
  104. Image.register_extension('FLI', '.fli')
  105. Image.register_extension('FLI', '.flc')
  106.